跳到主要内容

Git 删除分支快捷操作

在基于 PR 流程的项目中,由于每次开发都是基于新的分支,合并后远端一般策略也是会删除源分支,因此长期以后本地会积累大量的本地分支:

$ git branch
master
* develop
fix-2060
feature-xx
...

因此,当合并完 PR 后,我期望切换回 develop 分支,并删除切换前的分支,可以这么做:

git branch --show-current | { read -r CURRENT_BRANCH; git checkout develop; git branch -D $CURRENT_BRANCH }

但在此之前,我期望清除所有多余的分支,仅仅保留 master/develop,可以这么做:

git branch | grep -v "master\|develop" | xargs git branch -D

脚本全局化

由于在 Mac 系统中,可以使用自带的 /usr/local/bin 目录存放全局脚本,无需设置环境变量,因此暂时就先用它了,如果后续沉淀了足够多的 scripts 文件,可以考虑抽出来作为单独的 repo 进行管理,再额外配置环境变量路径。

现在将上述的两条命令转化为全局脚本,首先初始化文件:

cd /usr/local/bin
touch ggbcd && chmod +x ggbcd
touch ggbd && chmod +x ggbd

需要解释的是,以 gg 开发是为了避免和 zsh git plugin 冲突,因为里面包含许多以 g 开头的 alias。

其中命令的解释如下:

  • ggbcd [BRANCH_NAME](git branch checkout delete),切换并删除当前分支。
  • ggbdd [BRANCH_NAME1,BRANCH_NAME2](git branch delete),删除所有其他分支。

ggbcd

#!/bin/bash
git branch --show-current | { read -r CURRENT_BRANCH; git checkout $1; git branch -D $CURRENT_BRANCH; }

这样一来,使用 ggbcd develop 就可以安全切回 develop 分支并删除当前所在分支。

ggbd

通过脚本文件,我们可以改变参数的形式,以 , 进行多分支的选择:

#!/bin/bash
exclude_branches=$(echo $1 | sed 's/,/\\\|/g');
git branch | grep -v $exclude_branches | xargs git branch -D

若需要删除除 master 与 develop 分支,可以执行:ggbd master,develop

其他

远程分支删除

  • git push origin --delete main